package com.raycloud.util;

import java.util.Random;

import com.raycloud.common.Md5Encrypt;

public class ShortUrl {
	public static void main(String[] args) {   
        String url = "123";   
        for (String string : shortText(url)) {   
            print(string);   
        }   
    }   
	
	public static String getKey() {
		return getShortKey(String.valueOf(new Random().nextDouble()));
	}
	
	public static String getShortKey(String string) {
		return shortText(string)[0];
	}
       
    public static String[] shortText(String string){   
        String key = "raycloud.com";                 //自定义生成MD5加密字符串前的混合KEY   
        String[] chars = new String[]{          //要使用生成URL的字符   
            "a","b","c","d","e","f","g","h",   
            "i","j","k","l","m","n","o","p",   
            "q","r","s","t","u","v","w","x",   
            "y","z","0","1","2","3","4","5",   
            "6","7","8","9","A","B","C","D",   
            "E","F","G","H","I","J","K","L",   
            "M","N","O","P","Q","R","S","T",   
            "U","V","W","X","Y","Z"   
        };   
           
        String hex = Md5Encrypt.md5(key + string);   
        int hexLen = hex.length();   
        int subHexLen = hexLen / 8;   
        String[] ShortStr = new String[4];   
           
        for (int i = 0; i < subHexLen; i++) {   
            String outChars = "";   
            int j = i + 1;   
            String subHex = hex.substring(i * 8, j * 8);   
            long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);   
               
            for (int k = 0; k < 6; k++) {   
                int index = (int) (Long.valueOf("0000003D", 16) & idx);   
                outChars += chars[index];   
                idx = idx >> 5;   
            }   
            ShortStr[i] = outChars;   
        }   
           
        return ShortStr;   
    }   
       
    private static void print(Object messagr){   
        System.out.println(messagr);   
    }   
}
